package com.SmartCare.service.role;

import com.SmartCare.common.Result;
import com.SmartCare.common.vo.role.OpenIdAndSessionKeyVO;
import com.SmartCare.pojo.role.User;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 用户表 服务类
 */
public interface UserService extends IService<User> {
    /**
     * 后台用户登录功能
     * @param user 传入用户信息。其中密码非空，用户名和手机号传入其一
     * @return 返回统一结果类Result，携带数据为用户信息和token整合后的userDTO对象
     */
    Result login(User user);

    /**
     * 用户注册功能
     * @param user 传入用户注册信息。
     * @return 返回统一结果类Result，不携带数据
     */
    Result register(User user);

    /**
     * 查询所有用户
     *
     * @param pageNum  具体查询的页数
     * @param pageSize 每页中的用户数量
     * @param mode 操作对象是用户还是管理员
     * @return 返回Result类，携带查询到的用户列表数据
     */
    Result listUsers(Integer pageNum, Integer pageSize, boolean mode);

    /**
     * 微信登录
     */
    Result wxLogin(HttpServletRequest request, String openid);
    /**
     * 查询用户，以自定字段为依据进行分页模糊查询
     *
     * @param pageNum  具体查询哪页
     * @param pageSize 每页的大小
     * @param keyword  模糊查询关键词
     * @param type     搜索依据的字段名
     * @param mode     搜索对象是用户还是管理员。true为用户
     * @return 返回Result类，data中包含模糊查询的结果
     */
    Result search(Integer pageNum, Integer pageSize, String keyword, String type, boolean mode);


    /**
     * 获取getOpenIdAndSessionKey
     */
    OpenIdAndSessionKeyVO getOpenIdAndSessionKey(String code);

    /**
     * 新增或修改用户
     * @param user 用户信息
     * @return 返回Result类，不传递数据
     */
    Result saveUser(User user);

    /**
     * 启用或禁用单个用户
     * @param id     要进行操作的用户id
     * @param enable 要进行启用还是禁用
     * @return 返回Result类，不传递数据
     */
    Result enable(Long id, Boolean enable);

    /**
     * 根据id删除用户
     * @param id 要进行删除的用户的id
     * @return 返回Result类，不传递数据
     */
    Result deleteUser(Long id);

    /**
     * 批量启用或禁用用户
     * @param enable true为启用，false为禁用
     * @param ids 要进行操作的用户id
     * @return 返回Result类，不传递数据
     */
    Result enableBatch(Boolean enable, List<Long> ids);

    /**
     * 批量删除用户
     * @param ids 要进行删除的用户id数组字符串
     * @return 不传递数据
     */
    Result deleteBatch(String ids);

    /**
     * 护工登录
     */
    Result workerLogin(HttpServletRequest request, String account, String password, String careHomeName);

    /**
     * 家属个人信息查询
     */
    Result getFamilyInfo(Long userId);

    /**
     * 邮箱验证码方式
     */
    Result loginByEmail(String name, String authCode);

    /**
     * 修改密码
     */
    Result updatePwd(String name, String newPassword, String authCode);

    /**
     * 用户账号密码登录
     */
    Result userLogin(HttpServletRequest request, String account, String password, String careHomeName);

    /**
     * 后台修改密码
     * @param mail 用户绑定的邮箱
     * @param password 新密码
     * @return 返回密码修改结果
     */
    Result changePassword(String mail, String password);
    /**
     * 游客注册
     */
    Result register(String account, String password, String careHomeName, Integer identity);

    /**
     * 获取用户手机号
     */
    Result getPhoneNumber(String code);

    /**
     * 根据养老院获取所有护工
     * @param careHomeName 养老院名
     * @return 返回获取的护工列表
     */
    Result getWorkerList(String careHomeName);

    //设置用户头像和昵称
    Result updateNameAndIcon(Long userId, String avatarUrl, String nickName);

    /**
     * 获取养老院中所有用户信息
     * @param name 养老院名
     * @return 返回获取到的用户列表
     */
    Result getAllUser(String name);

    /**
     * 设置用户的姓名和电话
     * @param id 用户id
     * @param name 用户姓名
     * @param phone 用户电话
     * @return 不返回信息
     */
    Result setUserData(Long id, String name, String phone);

    /**
     * 根据养老院名称获取所有用户的id
     * @param careHomeName 养老院名
     * @return 返回该养老院用户的id列表
     */
    List<Long> getIdsByCHName(String careHomeName);
}
